﻿Imports System.Data
Imports CrystalDecisions.Shared
Imports CrystalDecisions.CrystalReports.Engine
Imports System.Data.OleDb
Imports System
Imports System.Globalization

Partial Class Interfaz_frmAdminOrdenTrabajo
    Inherits System.Web.UI.Page
    Dim CL As Logica.ModuloAdministracion.ControladorLogica
    Dim dataOT As New DataSetOrdenTrabajo
    Dim requestID As String = ""
    Dim dtDatosSubP As New DataTable
    Dim ArraySubP As New ArrayList

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Try
            CL = Logica.ModuloAdministracion.ControladorLogica.getInstance
            If CL.visibilidadesFormsInternos("Administracion", Session("user").ToString) = False Then
                Response.Redirect("Index.aspx")
            End If


            BtnVisualizar.Visible = False

            If Session("GridSUPDATOS") Is Nothing Then
                Session("GridSUPDATOS") = dtDatosSubP
            Else
                dtDatosSubP = DirectCast(Session("GridSUPDATOS"), DataTable)
            End If

            If Not Page.IsPostBack Then
                Me.LabelNumero.Text = Logica.ModuloAdministracion.ControladorLogica.getInstance.obtenerUltimaOrdentrabajo()
                dtDatosSubP.Columns.Clear()
                CargarDDLS()

                dtDatosSubP.Columns.Add(New DataColumn("ID"))
                dtDatosSubP.Columns.Add(New DataColumn("NOMBRE"))
                dtDatosSubP.Columns.Add(New DataColumn("DESCRIPCION"))
                dtDatosSubP.Columns.Add(New DataColumn("OBSERVACION"))
                dtDatosSubP.Columns.Add(New DataColumn("NOTASCLIENTE"))
                dtDatosSubP.Columns.Add(New DataColumn("NOTASVENTA"))

                Me.GridSubP.DataBind()
                Me.GridSubP.DataSource = Me.dtDatosSubP


                ArraySubP.Clear()
                ArraySubP = CL.obtenerSubProyectoCriterio(Me.DropPresupuesto.SelectedValue)

                If (ArraySubP.Count > 0) Then
                    obtenerSubproyectos()
                Else
                    Me.LblAvisoIngresoItemPresu.Text = "EL presupuesto Ingresado NO cuenta con Tareas a Realizar."
                End If

                CargarDatosPresupuesto()
            End If

        Catch ex As Exception
            Me.Mensaje(ex.ToString)
        End Try
       
    End Sub
   
  
#Region "Funciones"

    Private Sub CargarDDLS()
        Try
            Dim i As Integer

            Dim ArrayPresupuesto As New ArrayList
            Dim ArrayOrdenCompra As New ArrayList

            ArrayOrdenCompra = CL.ObtenerOrdenCompra()
            ArrayPresupuesto = CL.ObtenerPresupuestoCriterioAprobacion("A")

            For i = 0 To ArrayPresupuesto.Count - 1
                Dim itemPresupuesto As New ListItem

                itemPresupuesto.Text = DirectCast(ArrayPresupuesto.Item(i), Presupuesto).id
                itemPresupuesto.Value = DirectCast(ArrayPresupuesto.Item(i), Presupuesto).id
                Me.DropPresupuesto.Items.Add(itemPresupuesto)
            Next

            For i = 0 To ArrayOrdenCompra.Count - 1
                Dim itemOC As New ListItem

                itemOC.Text = DirectCast(ArrayOrdenCompra.Item(i), OrdenCompra).NumeroDeOrden
                itemOC.Value = DirectCast(ArrayOrdenCompra.Item(i), OrdenCompra).NumeroDeOrden
                Me.DropOrdenCompra.Items.Add(itemOC)
            Next

            Dim itemTaller As New ListItem

            itemTaller.Value = "Caldereria"
            itemTaller.Text = "Caldereria"
            Me.DropTaller.Items.Add(itemTaller)


            itemTaller.Value = "Mecanica"
            itemTaller.Text = "Mecanica"
            Me.DropTaller.Items.Add(itemTaller)


        Catch ex As Exception
            Me.Mensaje(ex.ToString)
        End Try
        
    End Sub

    Private Sub CargarDatosPresupuesto()
        Try
            Dim observaciones As String = ""
            Dim presupuesto As Presupuesto = DirectCast(Logica.ModuloAdministracion.ControladorLogica.getInstance.ObtenerPresupuestoCriterio(Me.DropPresupuesto.SelectedValue).Item(0), Presupuesto)
            Dim cliente As Cliente = DirectCast(Logica.ModuloAdministracion.ControladorLogica.getInstance.obtenerClienteID(presupuesto.fkCliente).Item(0), Cliente)
            Dim ListSubProyecto As ArrayList = Logica.ModuloAdministracion.ControladorLogica.getInstance.obtenerSubProyectoCriterio(presupuesto.id)

            Me.TxTCliente.Text = cliente.RznSocial
            Me.TxtApertura.Text = presupuesto.fecha
            Me.TxtFechaEntrega.Text = presupuesto.entrega
            Me.TxTDescrip.Text = presupuesto.DescripcionCabezera

            For i As Integer = 0 To ListSubProyecto.Count - 1
                Dim subProyecto As presupuestosubproyecto = DirectCast(ListSubProyecto.Item(i), presupuestosubproyecto)
                observaciones = observaciones + "Observacion N°" + CStr(i + 1) + ": " + subProyecto.observacionTaller + vbLf
            Next

            Me.TxtObservacionTaller.Text = observaciones
            Me.TxTCliente.Text = cliente.RznSocial
            Me.TxtValor.Text = presupuesto.total
            Me.txtEntrega.Text = presupuesto.entrega

            ArraySubP.Clear()
            dtDatosSubP.Clear()
            Me.GridSubP.DataSource = dtDatosSubP
            Me.GridSubP.DataBind()
            ArraySubP = CL.obtenerSubProyectoCriterio(Me.DropPresupuesto.SelectedValue)

            If (ArraySubP.Count > 0) Then
                obtenerSubproyectos()
            Else
                Me.LblAvisoIngresoItemPresu.Text = "EL presupuesto Ingresado NO cuenta con Tareas a Realizar."
            End If
        Catch ex As Exception
            Me.Mensaje(ex.ToString)
        End Try
       
    End Sub

    Public Sub Mensaje(ByVal msg As String)
        Dim alertScript As String = "<script language=JavaScript runat=server>"
        alertScript &= "alert('" & msg & "');"
        alertScript &= "</script>"
        ClientScript.RegisterClientScriptBlock(Page.GetType(), "clientScrip", alertScript)
    End Sub


    Private Sub CreaOrden()
        Try
            Dim _descripcion As String = Me.TxTDescrip.Text
            Dim _fkPresupuesto As Integer = Me.DropPresupuesto.SelectedValue
            Dim _estado As String = "E"
            Dim _fechaTermino As String = Me.txtFecha.Text
            Dim _requisicion As String = Me.TxtRequisicion.Text
            Dim _ordenCompra As Integer = Me.DropOrdenCompra.SelectedValue
            Dim _taller As String = Me.DropTaller.SelectedValue
            Dim _CreadoEl As String = Date.Now
            Dim _CreadoPor As String = DirectCast(Session("UsuarioConectado"), Usuario).ID

            Dim ot As New OrdenTrabajo(_descripcion, _fkPresupuesto, _estado, _fechaTermino, _requisicion, _ordenCompra, _taller, _CreadoEl, _CreadoPor)
            Dim cont As Integer = 0

            'metodo check tabas
            Dim filaGrid As GridViewRow

            With Me.GridSubP
                ' Recorrer las filas del dataGridView  
                For fila As Integer = 0 To .Rows.Count - 1
                    filaGrid = Me.GridSubP.Rows(fila)

                    ' Recorrer la cantidad de columnas que contiene el dataGridView  
                    Dim cb As CheckBox = filaGrid.FindControl("SelecItemOT")

                    If cb.Checked = True Then
                        cont = cont + 1
                    End If
                Next fila
            End With

            If cont > 0 Then

                CL.insertarOrdenTrabajo(ot)
                ' Me.clear()

                With Me.GridSubP
                    ' Recorrer las filas del dataGridView  
                    For fila As Integer = 0 To .Rows.Count - 1
                        filaGrid = Me.GridSubP.Rows(fila)

                        ' Recorrer la cantidad de columnas que contiene el dataGridView  
                        Dim cb As CheckBox = filaGrid.FindControl("SelecItemOT")

                        If cb.Checked = True Then
                            CL.ActualizarPresupuestoSubproyecto(filaGrid.Cells(1).Text, "si")
                        End If
                    Next fila
                End With

                Me.Mensaje("La orden de trabajo a sido ingresada exitosamente")
                BtnVisualizar.Visible = True
            Else
                Me.clear()
                Me.Mensaje("No ha Selecionado ningun Item para Aprovar, intente nuevamente")
            End If
        Catch ex As Exception
            LblAvisoIngresoItemPresu.Text = ex.ToString
        End Try
    End Sub

    Private Sub obtenerSubproyectos()
        dtDatosSubP.Clear()
        Me.LblAvisoIngresoItemPresu.Text = String.Empty
        Dim arraySP As presupuestosubproyecto

        Try
            Dim j As Integer

            For j = 0 To ArraySubP.Count
                Dim drDatos As DataRow = dtDatosSubP.NewRow

                arraySP = DirectCast(ArraySubP.Item(j), presupuestosubproyecto)
                drDatos.Item("ID") = arraySP.id
                drDatos.Item("NOMBRE") = arraySP.nombreSubProyecto
                drDatos.Item("DESCRIPCION") = arraySP.descripcionSubProyecto
                drDatos.Item("OBSERVACION") = arraySP.observacionTaller
                drDatos.Item("NOTASCLIENTE") = arraySP.notasAlCliente
                drDatos.Item("NOTASVENTA") = arraySP.notasVentas

                dtDatosSubP.Rows.Add(drDatos)

                Me.GridSubP.DataSource = dtDatosSubP
                Me.GridSubP.DataBind()
            Next j
        Catch ex As Exception
        End Try
    End Sub

    Private Sub clear()
        TxtRequisicion.Text = String.Empty
        txtFecha.Text = String.Empty
        DropOrdenCompra.SelectedIndex = -1
        DropTaller.SelectedIndex = -1
    End Sub
#End Region

#Region "Botones"
    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        CreaOrden()
    End Sub

    Protected Sub BtnVisualizar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles BtnVisualizar.Click
        Dim repo As New ReportDocument
        CargarPresupuesto()
        GuardarReporte(repo)
    End Sub
#End Region

#Region "Eventos"
    Protected Sub DropPresupuesto_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DropPresupuesto.SelectedIndexChanged
        CargarDatosPresupuesto()
    End Sub
#End Region

#Region "Utilidades"
    Public Function CargarPresupuesto() As Boolean
        Try
            Dim myRowOT As DataRow = Me.dataOT.DatosOrdenTrabajo.NewRow

            Dim observaciones As String = ""
            Dim presupuesto As Presupuesto = DirectCast(Logica.ModuloAdministracion.ControladorLogica.getInstance.ObtenerPresupuestoCriterio(Me.DropPresupuesto.SelectedValue).Item(0), Presupuesto)
            Dim cliente As Cliente = DirectCast(Logica.ModuloAdministracion.ControladorLogica.getInstance.obtenerClienteID(presupuesto.fkCliente).Item(0), Cliente)
            Dim ListSubProyecto As ArrayList = Logica.ModuloAdministracion.ControladorLogica.getInstance.obtenerSubProyectoCriterio(presupuesto.id)

         
            For i As Integer = 0 To ListSubProyecto.Count - 1
                Dim subProyecto As presupuestosubproyecto = DirectCast(ListSubProyecto.Item(i), presupuestosubproyecto)
                observaciones = observaciones + "Observacion N°" + CStr(i + 1) + ": " + subProyecto.observacionTaller + vbLf
            Next

            ' Carga De Datos del Cabezera
            myRowOT.Item("id") = Logica.ModuloAdministracion.ControladorLogica.getInstance.obtenerUltimaOrdentrabajo() + 1
            myRowOT.Item("descripcion") = Me.TxTDescrip.Text
            myRowOT.Item("fechaTermino") = Me.txtFecha
            myRowOT.Item("taller") = Me.DropTaller.SelectedValue
            myRowOT.Item("cliente") = cliente.RznSocial
            myRowOT.Item("presupuesto") = Me.DropPresupuesto.SelectedValue
            myRowOT.Item("ordenCompra") = Me.DropOrdenCompra.SelectedValue
            myRowOT.Item("requisicion") = Me.TxtRequisicion.Text
            myRowOT.Item("plano") = "FALTA"
            myRowOT.Item("fechaEntrega") = TxtFechaEntrega.Text
            myRowOT.Item("observacionesTaller") = observaciones

            Me.dataOT.DatosOrdenTrabajo.Rows.Add(myRowOT)

            Return True

        Catch ex As Exception
            Me.Mensaje(ex.ToString)
            Return False
        End Try
    End Function

    Public Sub GuardarReporte(ByVal repo As ReportDocument)

        Dim fileName As String = Server.MapPath("~\Interfaz\Reportes\ReporteOT.rpt")
        repo.Load(fileName)
        repo.SetDataSource(dataOT)

        Dim info As CrystalDecisions.CrystalReports.Engine.ReportDocument = repo
        info.PrintOptions.PaperOrientation = CrystalDecisions.Shared.PaperOrientation.Portrait
        info.PrintOptions.PaperSize = CrystalDecisions.Shared.PaperSize.PaperLetter
        Dim rptStream As New System.IO.MemoryStream
        rptStream = CType(info.ExportToStream(CrystalDecisions.[Shared].ExportFormatType.PortableDocFormat), System.IO.MemoryStream)
        Response.Clear()
        Response.ClearContent()
        Response.ClearHeaders()
        Response.Buffer = False
        Response.ContentType = "application/vnd.pdf"
        Response.AddHeader("Content-Disposition", "attachment;filename=Presupuesto-" + Me.LabelNumero.Text + ".pdf")
        Response.Flush()
        Response.BinaryWrite(rptStream.ToArray())
        Response.End()

    End Sub

#End Region

  
End Class
